package com.gmail.lucasddaniel.activities;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.telephony.SmsMessage;
import android.widget.Toast;

/**
 * Simples aplica��o que roda em modo servi�o para receber mensagem da operadora
 * identificando apenas o numero que ligou e alterar a mesma sms colocando o
 * nome do contato que ligou ao lado do seu numero.
 * 
 * SMS BINA
 * 
 * @author lucas
 * 
 */
public class SmsSniffer extends BroadcastReceiver {

	private static final String TIM = "TE LIGOU";
	private static final String CLARO = "CLARO RECADO";
	private static final String OI = "OI LIGOU";
	private static final String VIVO = "TAIS VIVO?";

	@Override
	public void onReceive(Context context, Intent intent) {
		String numero = "555555";
		String nomeContato = "";

		SmsMessage sms = recuperaSms(intent)[0];
		adicionaNomeSms(sms.getMessageBody(), nomeContato, numero);
		if (sms.getOriginatingAddress().equalsIgnoreCase(OI)) {
			numero = sms.getMessageBody().substring(32, 39);
			nomeContato = buscaNomeContato(numero);
			adicionaNomeSms(sms.getMessageBody(), nomeContato, numero);
			salvaSms(sms);
		} else if (sms.getOriginatingAddress().equalsIgnoreCase(TIM)) {
			numero = sms.getMessageBody().substring(32, 39);
			nomeContato = buscaNomeContato(numero);
			adicionaNomeSms(sms.getMessageBody(), nomeContato, numero);
			salvaSms(sms);
		} else if (sms.getOriginatingAddress().equalsIgnoreCase(CLARO)) {
			numero = sms.getMessageBody().substring(37, 46);
			nomeContato = buscaNomeContato(numero);
			adicionaNomeSms(sms.getMessageBody(), nomeContato, numero);
			salvaSms(sms);
		} else if (sms.getOriginatingAddress().equalsIgnoreCase(VIVO)) {
			numero = sms.getMessageBody().substring(32, 39);
			nomeContato = buscaNomeContato(numero);
			adicionaNomeSms(sms.getMessageBody(), nomeContato, numero);
			salvaSms(sms);
		}

		Toast.makeText(context, sms.getOriginatingAddress() + " " + numero,
				Toast.LENGTH_LONG).show();
	}

	private void salvaSms(SmsMessage sms) {
		// Intent sendIntent = new Intent(Intent.ACTION_VIEW);
		// sendIntent.putExtra("sms_body", sms.getMessageBody());
		// sendIntent.setType("vnd.android-dir/mms-sms");
		// Activity act = new Activity();
		// act.startActivity(sendIntent);

		ContentValues values = new ContentValues();
		values.put("address", sms.getOriginatingAddress());
		values.put("body", sms.getMessageBody());
		Activity act = new Activity();
		act.getContentResolver().insert(Uri.parse("content://sms/inbox"),
				values);
	}

	private void adicionaNomeSms(String texto, String nome, String numero) {
//		texto = texto.replace(numero, numero + " " + nome + " ");
		texto = texto + " lalalalalalala ";
	}

	/**
	 * Busca o nome do contato na agenda pelo numero do seu telefone.
	 * 
	 * @param numero
	 *            a buscar - String
	 * @return nome do contato - String
	 */
	private String buscaNomeContato(String numero) {
		// SQLiteOpenHelper helper = new SQLiteOpenHelper(context, nomeBanco,
		// null,
		// 1) {
		//
		// @Override
		// public void onUpgrade(SQLiteDatabase db, int oldVersion, int
		// newVersion)
		// {
		// }
		//
		// @Override
		// public void onCreate(SQLiteDatabase db) {
		// // TODO Auto-generated method stub
		//
		// }
		// };
		// SQLiteDatabase db = helper.getWritableDatabase();
		// Cursor pessoas = db.query(ContactsContract.Contacts.CONTENT_URI,
		// null,
		// null, null, null);
		// while(pessoas.moveToNext()) {
		// String nome =
		// pessoas.getString(pessoas.getColumnIndex(PhoneLookup.DISPLAY_NAME));
		// String numeroBase =
		// pessoas.getString(pessoas.getColumnIndex(PhoneLookup.NUMBER));
		// if (PhoneNumberUtils.compare(numero, numeroBase)) {
		// return nome;
		// } else {
		// break;
		// }
		// }
		// pessoas.close();
		return "ze da carro�a";
	}

	/**
	 * Recupera a sms da intent.
	 * 
	 * @param intent
	 *            - Intent.
	 * @return um array[] contendo a mensagem no indice 0 - SmsMessage[].
	 */
	private SmsMessage[] recuperaSms(Intent intent) {
		Object[] pdus = (Object[]) intent.getSerializableExtra("pdus");
		SmsMessage[] mensagens = new SmsMessage[pdus.length];
		for (int i = 0; i < pdus.length; i++) {
			mensagens[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
		}

		return mensagens;
	}
}
